﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using TCC_Hotel.Entidades;
using System.Data.SqlClient;
using System.Configuration;
using TCC_Hotel.Entidades.Basicas;

namespace TCC_Hotel.Repositorio
{
    public class GeralRepositorio
    {

        ControleBancoDados controle = new ControleBancoDados();

        /// <summary>
        /// pega todos os cargos dos funcionarios do banco
        /// </summary>
        /// <returns>Lista de funções</returns>
        public List<Cargo> GetCargos()
        {
            List<Cargo> listaResposta = new List<Cargo>();

            //pega o connectionstring do web config e configura apontando para o servidor externo
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
            SqlDataReader reader = null;

            //monta a query
            string query = "SELECT id, cargo FROM Cargos";
            SqlCommand cmd = new SqlCommand(query, con);
 
  //--------tenta conectar no servidor externo-----------------------
            try
            { 

                //abre conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();


                //executa a query
                reader = cmd.ExecuteReader();

                //le os dados retornados
                while (reader.Read())
                {
                    listaResposta.Add(new Cargo()
                    {

                        ID = Convert.ToInt32(reader["id"]),
                        Nome = Convert.ToString(reader["cargo"])

                    });

                }

                //fecha conexao
                con.Close();
            }
 //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch(SqlException e)
            {
                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    cmd.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = cmd.ExecuteReader();

                    //le os dados retornados
                    while (reader.Read())
                    {
                        listaResposta.Add(new Cargo()
                        {

                            ID = Convert.ToInt32(reader["id"]),
                            Nome = Convert.ToString(reader["cargo"])

                        });

                    }

                    //fecha conexao
                    con2.Close();
                }
            }
            finally
            {
                con.Close();
            }

                  

            return listaResposta;
        }


        /// <summary>
        /// pega todos os estados do banco
        /// </summary>
        /// <returns>Lista de estados</returns>
        public List<Estado> GetEstados()
        {
            List<Estado> listaResposta = new List<Estado>();

            //pega o connectionstring do web config
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);
         
            SqlDataReader reader = null;

            //monta a query
            string query = "SELECT sgl_estado, nom_estado FROM Estados";
            SqlCommand cmd = new SqlCommand(query, con);


 //--------tenta conectar no servidor externo-----------------------            
            try
            {
                //abre conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();


                //executa a query
                reader = cmd.ExecuteReader();

                //le os dados retornados
                while (reader.Read())
                {

                    listaResposta.Add(new Estado()
                    {

                        nome = Convert.ToString(reader["nom_estado"]),
                        sigla = Convert.ToString(reader["sgl_estado"])
                    });


                }

                //fecha conexao
                con.Close();
            }

  
 //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {

                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    cmd.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = cmd.ExecuteReader();

                    //le os dados retornados
                    while (reader.Read())
                    {

                        listaResposta.Add(new Estado()
                        {

                            nome = Convert.ToString(reader["nom_estado"]),
                            sigla = Convert.ToString(reader["sgl_estado"])
                        });


                    }

                    //fecha conexao
                    con2.Close();
                }
            }
            finally
            {
                con.Close();
            }



            return listaResposta;
        }

        /// <summary>
        /// recupera preco da diaria atravéz de um certo numero d hóspedes
        /// </summary>
        /// <returns>Preco da diaria</returns>
        public double RecuperarPrecoDiaria(int Numero)
        {
            List<Preco_Diaria> listaResposta = new List<Preco_Diaria>();

            //pega o connectionstring do web config
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoServidor"].ConnectionString);

            SqlDataReader reader = null;

            //monta a query
            string query = "SELECT Preco FROM Preco_Diarias WHERE NumeroHospedes = " + Numero;
            SqlCommand cmd = new SqlCommand(query, con);


            //--------tenta conectar no servidor externo-----------------------            
            try
            {
                //abre conexao
                con.Open();

                //Verifica se tem algum comando nao executado no servidor principal
                controle.verificaConsistencia();
                controle.verificaConsistenciaLocal();


                //executa a query
                reader = cmd.ExecuteReader();

                //le os dados retornados
                while (reader.Read())
                {

                    listaResposta.Add(new Preco_Diaria()
                    {
                        NumeroHospedes = Numero,
                        Preco = Convert.ToDouble(reader["Preco"])
                    });


                }

                //fecha conexao
                con.Close();
            }


 //--------Ocorreu excessao, conectar no servidor local-------------------------
            catch (SqlException e)
            {

                //erro referente a servidor inacessivel ou timeout ocorreu
                if (e.Number == 53 || e.Number == -2)
                {
                    //configura para apontar no servidor local
                    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["AplicacaoLocal"].ConnectionString);
                    cmd.Connection = con2;

                    //abre conexao
                    con2.Open();

                    //executa a query
                    reader = cmd.ExecuteReader();

                    //le os dados retornados
                    while (reader.Read())
                    {

                        listaResposta.Add(new Preco_Diaria()
                        {
                            NumeroHospedes = Numero,
                            Preco = Convert.ToDouble(reader["Preco"])
                        });


                    }

                    //fecha conexao
                    con2.Close();
                }
            }
            finally
            {
                con.Close();
            }



            return listaResposta.FirstOrDefault().Preco;
        }
    }
    
}